cat("\f") #kitörlöm a console tartalmát
rm(list=ls()) #kitörlök minden objektumot az environmentemben
options(scipen = 999) #"elfelejtek" minden korábban betöltött csomagot

#itt betöltöm a csomagjaimat:

library(dplyr)#adattábla művéletekhez
library(stringr)#stringek kezeléséhez
library(quanteda)#szentiment analízishez
library(HunMineR)#szentiment szótár
library(car)#a vif méréséhez
library(tidytext)#az n-grammok kialakításához
library(tidyr)

#betöltöm az adatokat:
data <- read.csv("data/csv/filtered_prepped.csv")
data <- data %>% select(-c("X", "Unnamed..0"))
names(data)

#gyors utolsó tisztítás:

data$text <- data$text %>% str_replace_all("\\.", " ")
data$text <- data$text %>% str_replace_all("\\)", " ")
data$text <- data$text %>% str_squish()


#betöltöm a szótárat:
poltext_szotar <- HunMineR::dictionary_poltext

#Definiálom a tagadó szavak listáját.
tagado_szavak <- c("nem", "ne", "se", "sem", "nincs", "nincsenek", "semmilyen", "semmiféle",
                   "semmennyi", "sehol", "sehova", "sehonnan", "semmikor", "semmiért",
                   "semmit", "semmibe", "senki", "senkinek", "senkit", "senkivel", "senkinél",
                   "senkiért", "senkibe", "semmivel", "semminek", "senkik", "semmiképp",
                   "semmiképpen", "senkinél", "senkivel", "semmik", "semmin", "semmié",
                   "sehonnét", "semmilyen", "semmikép",
                   "senkinek", "senkiknek", "semmiknek", "sehogy", "sehogyse", "sehova",
                   "semmikor", "sehány", "sehányan", "sehányadik", "sehányadika", "sehánykor",
                   "sehánykorra", "seholse", "semhogy", "semmiéért", "semmilyenféle", "senkié",
                   "senkiével", "senkiéi", "semmise", "semmiképp", "semmiképpen", "semennyire",
                   "semhogyse", "sehogysem")

#legyártom a bi és tri gram kombinációkat:
bigrams_n2 <- data %>% 
  unnest_tokens(bigram, text, token = "ngrams", n = 2) %>% select(bigram)


bigrams_n3 <- data %>% 
  unnest_tokens(bigram, text, token = "ngrams", n = 3) %>% select(bigram)

#ellenőrzöm az elválaszthatáságukat

unique(str_count(bigrams_n2$bigram, " "))

unique(str_count(bigrams_n3$bigram, " "))

#szét szedem a szó párokat:

bigrams_n2 <- bigrams_n2 %>%
  separate(bigram, c("word1", "word2"), sep = " ")

bigrams_n3 <- bigrams_n3 %>%
  separate(bigram, c("word1", "word2", "word3"), sep = " ")


#leszűröm csak azokra az esetekre, ahol tagadó szavak vannak jelen:

bigrams_n2 <- bigrams_n2 %>% subset(word1 %in% tagado_szavak | word2 %in% tagado_szavak)
bigrams_n3 <- bigrams_n3 %>% subset(word1 %in% tagado_szavak | word2 %in% tagado_szavak | word3 %in% tagado_szavak)

bigrams_n2$bigram <- paste(bigrams_n2$word1, bigrams_n2$word2, sep = "_")

#leszűröm csak azokra az esetekre, ahol pozitív szentiment szavak vannak jelen:

bigrams_n2 <- bigrams_n2 %>% subset(word1 %in% poltext_szotar$positive | word2 %in% poltext_szotar$positive | word1 %in% poltext_szotar$negative | word2 %in% poltext_szotar$negative)
bigrams_n3 <- bigrams_n3 %>% subset(word1 %in% poltext_szotar$positive | word2 %in% poltext_szotar$positive | word3 %in% poltext_szotar$positive | word1 %in% poltext_szotar$negative | word2 %in% poltext_szotar$negative | word3 %in% poltext_szotar$negative)

#kötőjellel elválasztva összeillesztem az n-grammokat

bigrams_n2$bigram <- paste(bigrams_n2$word1, bigrams_n2$word2, sep = "_")
bigrams_n3$bigram <- paste(bigrams_n3$word1, bigrams_n3$word2, bigrams_n3$word3, sep = "_")

#hozzáadok új elemeket a szentiment szótárhoz:

length(poltext_szotar$positive)
poltext_szotar$positive <- poltext_szotar$positive[poltext_szotar$positive != "emberi"]

poltext_szotar$negative <- c(poltext_szotar$negative, "nem_tud", "sehogy_tud", "semmiképpen_ad")

#kiválasztott n-grammokat behelyezzük a szövegbe

for (i in 1:nrow(data)) {
 
  data$text <- data$text %>% str_replace_all("nem tud", "nem_tud")
  data$text <- data$text %>% str_replace_all("sehogy tud", "sehogy_tud")
  data$text <- data$text %>% str_replace_all("semmiképpen ad", "semmiképpen_ad")
   
}

#összesen három esetben lett így változás csak:

data$text[str_detect(data$text, "sehogy_tud")]
data$text[str_detect(data$text, "nem_tud")]
data$text[str_detect(data$text, "semmiképpen_ad")]

#a quanteda formátumokba helyezem a korpuszt:
corp <- corpus(data)
toks <- tokens(corp)
dfm <- dfm(toks)

#összevetem a szótárat a korpusszal:
szentiment_eredmenyek <- dfm_lookup(dfm, poltext_szotar)

#hozzárendelem a szentiment változókat az eredeti 
data$positive <- as.numeric(szentiment_eredmenyek[,1])
data$negative <- as.numeric(szentiment_eredmenyek[,2])

data$nword <- NA

for (i in 1:nrow(data)) {
  
  data$nword[i] <- length(str_split(data$text[i], " ")[[1]])
  
}


data$sentiment <- data$positive - data$negative

data$sentiment <- data$sentiment/data$nword

write.csv(data, "sentiment_data.csv")

#átlag szentiment:
mean(data$sentiment)

names(data)


#modell formulával:
modell <- lm(data, formula = sentiment ~ szulatlisk + nem +  Z_ai_tanulasban + Z_plathaszn)
summary(modell)


vif_res <- vif(modell) %>% data.frame()
names(vif_res) <- "vif"

#regresziós összefüggés összefoglalója:
result <- summary(modell)
result <- result$coefficients
result <- data.frame(result)
result$var <- row.names(result)

result$vif <- c(NA, vif_res$vif)

writexl::write_xlsx(result, "regression_result.xlsx")
